/**	@file collisioni.h
 *	Questo è un header file che contiene i protitipi delle funzioni definite in collisioni.cc.
 */

/*
 * Macro per non includere il codice più volte
 */
#ifndef _COLLISIONI_H_
#define _COLLISIONI_H_


#include "models.h"
#include"globali.h"

/**Funzione che gestisce la collisione tra le bolle e o robot, o la frutta/dolci.
 * Richiama le funzioni di collisione collisioni_X e collisioni_Y. 
 * Se le bolle presenti sullo schermo sono vive e collidono con gli altri oggetti (robot o frutta)
 * muoiono, e uccidono di conseguenza anche gli oggetti che toccano.
 */
void gestisci_collisione_bolle(Bolle bolle[], int bDim, Robot robot[], int cDim, Frutta frutta[], int fDim, Drago &drago);

/** Gestisce le collisione del robot con il drago o con il suolo.
 *Vengono richiamate le funzioni dicollisioni_X e Collcollisioni_Y, 
 * nel caso in cui i robot collidessero con il
 * drago questo perde una vita, e il robot muore. Stesse conseguenze se il drago tocca terra senza essere
 * stato ucciso da una bolla.
 */
void gestisci_collisioni_robot(Robot robot[], int cDim, Drago &drago);

/** Gestisce la collisione della frutta/dolce con ciascuna bolla o con il drago o con il pavimento.
 * Per ogni frutto/dolce vivo vengono richiamate le funzioni collisioni_X e collsioni_Y
 * per verificare se la frutta ha avuto una collisione con: le bolle o il drago.
 * Nel primo caso si perdono dei punti e sia il drago che la bolla muoiono, nel secondo caso la frutta muore
 * e il punteggio aumenta.
 * Se la frutta arriva a toccare il pavimento muore senza provocare ulteriori conseguenze.
 */
void gestisci_collisioni_frutta(Frutta frutta[], int fDim, Drago &drago);

/** Controlla i casi di collisione possibili tra due oggetti.
 * Controlla i vari casi in cui gli oggetti passati possono aver colliso,
 * prendendo in ingresso le quattro x, che rappresentano i due segmenti da controllare.
 * @return true se hanno colliso, false altrimenti.
 *
 * Questa funzione e usata in combinazione con collisioni_Y.
 */
bool collisioni_X(int x1min, int x1max, int x2min, int x2max);

/** Controlla che i due oggetti abbiano le altezze affiancate.
 * @return true se sono affiancate, false altrimenti.
 *
 * Questa funzione e usata in combinazione con collisioni_X, 
 * in modo da assicurare che gli oggetti siano effettivamente sovrapposti.
 */
bool collisioni_Y(int y1max, int y2min);
#endif

